package commerce.business;


import java.util.List;

import org.apache.log4j.Logger;

import commerce.hibernate.dao.CommerceDAO;
import commerce.hibernate.po.*;
/*
 * 电子商务管理业务类
 * 包含了大部分非店铺管理需求的功能操作
 */
public class CommerceBusiness {
	public Logger logger = Logger.getLogger(this.getClass());
	CommerceDAO dao=new CommerceDAO();
	/////////////////////////////////////////////////////
	/*
	 * 产品分类管理
	 */
	////////////////////////////////////////////////////
	/*
	 * 获取产品分类
	 * @param id  产品分类id
	 */
	public ProductCategory getCategoryById(int id)
	{		
		return dao.getCategoryById(id);
	}
	/*
	 * 保存产品分类
	 * 该功能通常由平台管理员实施
	 * @param category 待保存的产品分类 
	 */	
	public boolean saveCategory(ProductCategory category)
	{		
		if(category==null)
		{
			logger.error("create category failed!");
			return false;
		}
		if(category.getCategoryName()==null||category.getCategoryName().equals(""))
		{
			logger.error("category name can not be blank!");
			return false;
		}		
		return dao.saveOrupdate(category);
	}
	/*
	 * 获取所有产品分类
	 * 
	 */
	public List getAllCategory()
	{
		return dao.getList(ProductCategory.class.getName());
	}
	/*
	 * 获取所有一级分类
	 */
	public List getAllParentCategroy()
	{
		String strhql=" from ProductCategory as p where p.parentId=-1";
		return dao.find(strhql);
	}
	/*
	 * 删除产品分类
	 * 该功能通常由平台管理员实施
	 * 删除分类时，同时要删除该分类的所有子分类
	 * @param category 产品分类对象
	 */
	public boolean deleteCategory(ProductCategory category)
	{
		if(category==null)
			return true;
		String strhql=" delete from ProductCategory as o where o.id="+category.getId()+" or o.parentId="+category.getId();
		return dao.excuteHql(strhql);
	}
	
	/*
	 * 获取产品分类
	 * 该功能通常由平台管理员实施
	 * @param id  产品分类id
	 */
	public ProductCategory getCategoryById(Integer id)
	{			
		return dao.getCategoryById(id);
	}
	/*
	 * 删除产品分类
	 * 该功能通常由平台管理员实施
	 * @param id  产品分类id
	 */
	public boolean deleteCategoryById(Integer id)
	{	
		if(id==null)
			return true;
		String strhql=" delete from ProductCategory as o where o.id="+id+" or o.parentId="+id;
		return dao.delete(ProductCategory.class, id);
	}
	/*
	 * 批量删除产品分类
	 * 该功能通常由平台管理员实施
	 * @param idArray  待删除产品分类id数组
	 */
	public boolean deleteCategoryBatch(Integer[] idArray)
	{			
		return dao.batchDelete(ProductCategory.class, idArray);
	}
	/*
	 * 根据产品分类名称获取分类，分页查找
	 * @param categoryName  查找分类名称，模糊查找
	 * @param pageNO 页码
	 * @param pageSize 每页的数目
	 */
	public List getCategoryByName(String categoryName,int pageNO,int pageSize)
	{
		List result=null;
		String strhql=" from ProductCategory as a where a.categoryName like '%"+categoryName+"%'";
		result=dao.query(pageNO, pageSize, strhql);
		return result;
	}
	/*
	 * 根据产品分类名称获取分类，查找所有结果
	 * @param categoryName 产品分类名
	 */
	public List getCategoryByName(String categoryName)
	{
		List result=null;
		String strhql=" from ProductCategory as a where a.categoryName like '%"+categoryName+"%'";
		result=dao.find(strhql);
		return result;
	}
	/////////////////////////////////////////////////////
	/*
	 * 店铺管理
	 */
	////////////////////////////////////////////////////
	/*
	 * 获取店铺
	 * @param id  店铺id
	 */
	public Shop getShopById(int id)
	{		
		return dao.getShopById(id);
	}
	/*
	 * 保存店铺
	 * @param shop 待保存的店铺对象
	 * 
	 */	
	
	public boolean saveShop(Shop shop)
	{		
		return dao.saveOrupdate(shop);
	}
	
	/*
	 * 删除店铺
	 * @param shop 店铺对象
	 */
	public boolean deleteShop(Shop shop)
	{
		return dao.delete(shop);
	}
	/*
	 * 删除店铺
	 * @param id  店铺id
	 */
	public boolean deleteShopById(Integer id)
	{
		return dao.delete(Shop.class, id);
	}
	/*
	 * 批量删除店铺
	 * @param idArray  待删除店铺id数组
	 */
	public boolean deleteShopBatch(Integer[] idArray)
	{
		return dao.batchDelete(Shop.class, idArray);
	}
	/*
	 * 获取所有店铺
	 * 
	 */
	public List getAllShop()
	{
		return dao.getList(Shop.class.getName());
	}
	/*
	 * 根据店铺名称查找店铺
	 * @param shopName  查找分类名称，模糊查找
	 */
	
	public Shop getShopByName(String shopName)
	{
		List result=null;
		String strhql=" from Shop as a where a.shopName like '%"+shopName+"%'";
		result=dao.find(strhql);
		if(result==null||result.size()<=0)
			return null;		
		return (Shop)result.get(0);
	}
	public Shop getShopByAdminName(String adminName)
	{
		List result=null;
		String strhql=" from Shop as a where a.adminName like '%"+adminName+"%'";
		result=dao.find(strhql);
		if(result==null||result.size()<=0)
			return null;		
		return (Shop)result.get(0);
	}
	/*
	 * 根据店铺名称获取分类，查找所有结果
	 * @param categoryName 产品分类名
	 */
	/*
	public List getCategoryByName(String categoryName)
	{
		List result=null;
		String strhql=" from ProductCategory as a where a.categoryName like '%"+categoryName+"%'";
		result=dao.find(strhql);
		return result;
	}
	*/
	/////////////////////////////////////////////////////
	/*
	 * 产品管理
	 */
	////////////////////////////////////////////////////
	/*
	 * 获取产品
	 * @param id  产品分类id
	 */
	public Product getProductById(int id)
	{		
		Object o=dao.getProductById(id);
		if(o==null)
			return null;
		Product p=(Product)o;
		//对于非门店操作，仅能获取可见的产品信息
		if(p.getIsVisiable()==0)
		{
			return null;
		}
		return p;
	}
	/*
	 * 保存产品
	 * @param product 待保存的产品对象
	 * @return 保存成功返回true，否则返回false
	 */	
	
	public boolean saveProduct(Product product)
	{		
		return dao.saveOrupdate(product);
	}
	
	/*
	 * 删除产品
	 * @param product 产品对象
	 */
	public boolean deleteProduct(Product product)
	{
		return dao.delete(product);
	}
	/*
	 * 删除产品
	 * @param id  产品id
	 */
	public boolean deleteProductById(Integer id)
	{
		return dao.delete(Product.class, id);
	}
	/*
	 * 批量删除产品
	 * @param idArray  待删除产品id数组
	 */
	public boolean deleteProductBatch(Integer[] idArray)
	{
		return dao.batchDelete(Product.class, idArray);
	}
	/*
	 * 获取所有产品
	 * 对于非门店操作，仅列出所有可见产品
	 */
	public List getAllProduct()
	{
		String strhql=" from Product as p where p.isVisiable=1";
		return dao.find(strhql);
	}
	/*
	 * 获取所有产品,分页显示
	 * 对于非门店操作，仅列出所有可见产品
	 * @param pageNO 页数
	 * @param pageSize 每页记录数
	 */
	public List getAllProduct(int pageNO,int pageSize)
	{
		List result=null;
		String strhql=" from Product as p where p.isVisiable=1";
		result=dao.query(pageNO, pageSize, strhql);
		return result;
	}
	/////////////////////////////////////////////////////
	/*
	 * 消费者会员管理
	 */
	////////////////////////////////////////////////////
	
	/**
	 * 保存消费者会员
	 * @param member 会员对象
	 *  
	 */
	public boolean saveMember(Member member) {
		// 非空检查
		if(member == null) {
			logger.error("create member failed! member is null");
			return false;
		}
		// 根据邮件地址发送激活验证码
		
		return dao.saveOrupdate(member);
	}
	
	public boolean deleteMember(Member member) {
		return false;
	}
	
	public boolean deleteMemberById(int id) {
		return false;
	}
	
	public boolean deleteMemberBatch(int[] idArray) {
		return false;
	}
	
	public List getAllMember() {
		return null;
	}
	
	public Member getMemberById(int id) {
		return null;
	}
	
	public List getAllMember(int pageNo, int pageSize) {
		return null;
	}
}
